
<!doctype html>
<html lang="en" class="no-js">
  <head>
    
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width,initial-scale=1">
      
      
      
      
        <link rel="prev" href="../Mounting-Configs/">
      
      
        <link rel="next" href="../Kubernetes/">
      
      <link rel="icon" href="../assets/images/favicon.png">
      <meta name="generator" content="mkdocs-1.4.2, mkdocs-material-9.0.8">
    
    
      
        <title>Running the Image - Kartoza/docker-geoserver Documentation</title>
      
    
    
      <link rel="stylesheet" href="../assets/stylesheets/main.0d440cfe.min.css">
      
        
        <link rel="stylesheet" href="../assets/stylesheets/palette.2505c338.min.css">
      
      

    
    
    
      
        
        
        <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
        <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
        <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
      
    
    
    <script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
    
      

    
    
    
  </head>
  
  
    
    
    
    
    
    <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="brown" data-md-color-accent="yellow">
  
    
    
    <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
    <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
    <label class="md-overlay" for="__drawer"></label>
    <div data-md-component="skip">
      
        
        <a href="#running-the-image" class="md-skip">
          Skip to content
        </a>
      
    </div>
    <div data-md-component="announce">
      
    </div>
    
    
      

<header class="md-header" data-md-component="header">
  <nav class="md-header__inner md-grid" aria-label="Header">
    <a href=".." title="Kartoza/docker-geoserver Documentation" class="md-header__button md-logo" aria-label="Kartoza/docker-geoserver Documentation" data-md-component="logo">
      
  
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>

    </a>
    <label class="md-header__button md-icon" for="__drawer">
      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
    </label>
    <div class="md-header__title" data-md-component="header-title">
      <div class="md-header__ellipsis">
        <div class="md-header__topic">
          <span class="md-ellipsis">
            Kartoza/docker-geoserver Documentation
          </span>
        </div>
        <div class="md-header__topic" data-md-component="header-topic">
          <span class="md-ellipsis">
            
              Running the Image
            
          </span>
        </div>
      </div>
    </div>
    
    
    
      <label class="md-header__button md-icon" for="__search">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
      </label>
      <div class="md-search" data-md-component="search" role="dialog">
  <label class="md-search__overlay" for="__search"></label>
  <div class="md-search__inner" role="search">
    <form class="md-search__form" name="search">
      <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
      <label class="md-search__icon md-icon" for="__search">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
      </label>
      <nav class="md-search__options" aria-label="Search">
        
        <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
        </button>
      </nav>
      
    </form>
    <div class="md-search__output">
      <div class="md-search__scrollwrap" data-md-scrollfix>
        <div class="md-search-result" data-md-component="search-result">
          <div class="md-search-result__meta">
            Initializing search
          </div>
          <ol class="md-search-result__list" role="presentation"></ol>
        </div>
      </div>
    </div>
  </div>
</div>
    
    
      <div class="md-header__source">
        <a href="https://github.com/kartoza/docker-geoserver" title="Go to repository" class="md-source" data-md-component="source">
  <div class="md-source__icon md-icon">
    
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
  </div>
  <div class="md-source__repository">
    GitHub
  </div>
</a>
      </div>
    
  </nav>
  
</header>
    
    <div class="md-container" data-md-component="container">
      
      
        
          
        
      
      <main class="md-main" data-md-component="main">
        <div class="md-main__inner md-grid">
          
            
              
              <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
                <div class="md-sidebar__scrollwrap">
                  <div class="md-sidebar__inner">
                    


<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
  <label class="md-nav__title" for="__drawer">
    <a href=".." title="Kartoza/docker-geoserver Documentation" class="md-nav__button md-logo" aria-label="Kartoza/docker-geoserver Documentation" data-md-component="logo">
      
  
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>

    </a>
    Kartoza/docker-geoserver Documentation
  </label>
  
    <div class="md-nav__source">
      <a href="https://github.com/kartoza/docker-geoserver" title="Go to repository" class="md-source" data-md-component="source">
  <div class="md-source__icon md-icon">
    
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
  </div>
  <div class="md-source__repository">
    GitHub
  </div>
</a>
    </div>
  
  <ul class="md-nav__list" data-md-scrollfix>
    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href=".." class="md-nav__link">
        Kartoza/docker-geoserver
      </a>
    </li>
  

    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="../Getting-the-image/" class="md-nav__link">
        Getting the image
      </a>
    </li>
  

    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="../Environment-Variables/" class="md-nav__link">
        Environment Variables
      </a>
    </li>
  

    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="../Mounting-Configs/" class="md-nav__link">
        Mounting Configs
      </a>
    </li>
  

    
      
      
      

  
  
    
  
  
    <li class="md-nav__item md-nav__item--active">
      
      <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
      
      
      
        <label class="md-nav__link md-nav__link--active" for="__toc">
          Running the Image
          <span class="md-nav__icon md-icon"></span>
        </label>
      
      <a href="./" class="md-nav__link md-nav__link--active">
        Running the Image
      </a>
      
        

<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  
  
  
  
    <label class="md-nav__title" for="__toc">
      <span class="md-nav__icon md-icon"></span>
      Table of contents
    </label>
    <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
      
        <li class="md-nav__item">
  <a href="#running-the-image" class="md-nav__link">
    Running the Image
  </a>
  
    <nav class="md-nav" aria-label="Running the Image">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#run-automated-using-docker-compose" class="md-nav__link">
    Run (automated using docker-compose)
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#reverse-proxy-using-nginx" class="md-nav__link">
    Reverse Proxy using NGINX
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#additional-notes-for-macos-m1-chip" class="md-nav__link">
    Additional Notes for MacOS M1 Chip
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#reverse-proxy-using-nginx_1" class="md-nav__link">
    Reverse Proxy using NGINX
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
    </ul>
  
</nav>
      
    </li>
  

    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="../Kubernetes/" class="md-nav__link">
        Kubernetes
      </a>
    </li>
  

    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="../Support-and-credits/" class="md-nav__link">
        Support and credits
      </a>
    </li>
  

    
  </ul>
</nav>
                  </div>
                </div>
              </div>
            
            
              
              <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
                <div class="md-sidebar__scrollwrap">
                  <div class="md-sidebar__inner">
                    

<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  
  
  
  
    <label class="md-nav__title" for="__toc">
      <span class="md-nav__icon md-icon"></span>
      Table of contents
    </label>
    <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
      
        <li class="md-nav__item">
  <a href="#running-the-image" class="md-nav__link">
    Running the Image
  </a>
  
    <nav class="md-nav" aria-label="Running the Image">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#run-automated-using-docker-compose" class="md-nav__link">
    Run (automated using docker-compose)
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#reverse-proxy-using-nginx" class="md-nav__link">
    Reverse Proxy using NGINX
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#additional-notes-for-macos-m1-chip" class="md-nav__link">
    Additional Notes for MacOS M1 Chip
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#reverse-proxy-using-nginx_1" class="md-nav__link">
    Reverse Proxy using NGINX
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
    </ul>
  
</nav>
                  </div>
                </div>
              </div>
            
          
          
            <div class="md-content" data-md-component="content">
              <article class="md-content__inner md-typeset">
                
                  

  
  



  <h1>Running the Image</h1>

<h2 id="running-the-image">Running the Image</h2>
<h3 id="run-automated-using-docker-compose">Run (automated using docker-compose)</h3>
<p><strong>Note:</strong> You probably want to use docker-compose for running as it will provide
a repeatable orchestrated deployment system.</p>
<p>We provide a sample <code>docker-compose.yml</code> file that illustrates
how you can establish a GeoServer + PostGIS.</p>
<p>If you are interested in the backups , add a section in the <code>docker-compose.yml</code>
following instructions from <a href="https://github.com/kartoza/docker-pg-backup/blob/master/docker-compose.yml#L23">docker-pg-backup</a>.</p>
<p>If you start the stack using the compose file make sure you log in into GeoServer using username:<code>admin</code> and password:<code>myawesomegeoserver</code>.</p>
<p><strong>Note</strong> The username and password are specified in the <code>.env</code> file. It is recommended
to change them into something more secure otherwise a strong password is generated.</p>
<p>Please read the <code>docker-compose</code>
<a href="https://docs.docker.com/compose/">documentation</a> for details on usage and syntax of <code>docker-compose</code> - it is 
not covered here.</p>
<p>Once all the services start, test by visiting the GeoServer landing
page in your browser: <a href="http://localhost:8600/geoserver">http://localhost:8600/geoserver</a>.</p>
<p>To run in the background rather, press <code>ctrl-c</code> to stop the
containers and run again in the background:</p>
<pre><code class="language-shell">docker-compose up -d
</code></pre>
<p><strong>Note:</strong> The <code>docker-compose.yml</code> <strong>uses host-based volumes</strong> so
when you remove the containers, <strong>all data will be kept</strong>. Using host-based volumes ensures that your data persists 
between invocations of the compose file. If you need to delete the container data you need to run <code>docker-compose down -v</code>.</p>
<h3 id="reverse-proxy-using-nginx">Reverse Proxy using NGINX</h3>
<p>You can also put Nginx in front of GeoServer to receive the http request and translate it to uwsgi.</p>
<p>A sample <code>docker-compose-nginx.yml</code> is provided for running GeoServer and Nginx</p>
<pre><code class="language-shell">docker-compose -f docker-compose-nginx.yml  up -d
</code></pre>
<p>Once the services are running GeoServer will be available from</p>
<p>http://localhost/geoserver/web/</p>
<h3 id="additional-notes-for-macos-m1-chip">Additional Notes for MacOS M1 Chip</h3>
<p>To run the docker image with MacOS M1 Chip, the image needs to be built locally.</p>
<ul>
<li>JDK version of “9-jdk17-openjdk-slim-buster “ can work with M1 Chip as it is instructed on "Local build using 
repository checkout" section, the parameters below needs to be changed in <a href="https://github.com/kartoza/docker-geoserver/blob/master/.env">.env</a> file and <a href="https://github.com/kartoza/docker-geoserver/blob/master/Dockerfile">Dockerfile</a></li>
</ul>
<pre><code>IMAGE_VERSION=9-jdk17-openjdk-slim-buster
JAVA_HOME=/usr/local/openjdk-17
</code></pre>
<ul>
<li>The change above also requires the removal of some command-line options in 
<a href="https://github.com/kartoza/docker-geoserver/blob/master/scripts/entrypoint.sh">entrypoint.sh</a> file. 
(Since they generate <code>Unrecognized VM option 'CMSClassUnloadingEnabled'</code> error and these options are related to 
JDK10 and lower)</li>
</ul>
<pre><code>-XX:+CMSClassUnloadingEnabled
-XX:+UseG1GC
</code></pre>
<p>After these changes, the image can be built as instructed.</p>
<p>To run the just-built local image with your docker-compose file, the platform option in the docker-compose file 
needs to be specified as <code>linux/arm64/v8</code>. Otherwise, it will try to pull the docker image from the docker hub 
instead of using the local image.</p>
<h3 id="reverse-proxy-using-nginx_1">Reverse Proxy using NGINX</h3>
<p>You can also put nginx in front of geoserver to receive http request and translate it to uwsgi.</p>
<p>A sample <code>docker-compose-nginx.yml</code> is provided for running geoserver and nginx</p>
<pre><code class="language-shell">docker-compose -f docker-compose-nginx.yml  up -d
</code></pre>
<p>Once the services are running GeoServer will be available from</p>
<p>http://localhost/geoserver/web/</p>





                
              </article>
            </div>
          
          
        </div>
        
      </main>
      
        <footer class="md-footer">
  
  <div class="md-footer-meta md-typeset">
    <div class="md-footer-meta__inner md-grid">
      <div class="md-copyright">
  
  
    Made with
    <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
      Material for MkDocs
    </a>
  
</div>
      
    </div>
  </div>
</footer>
      
    </div>
    <div class="md-dialog" data-md-component="dialog">
      <div class="md-dialog__inner md-typeset"></div>
    </div>
    
    <script id="__config" type="application/json">{"base": "..", "features": ["content.code.copy"], "search": "../assets/javascripts/workers/search.db81ec45.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
    
    
      <script src="../assets/javascripts/bundle.a00a7c5e.min.js"></script>
      
    
  </body>
</html>